package com.apanal.qlife.sys.service;

import java.util.List;
import java.util.Set;

import com.apanal.qlife.common.aop.UserAuthCacheAspect;
import com.apanal.qlife.common.page.Page;
import com.apanal.qlife.common.page.PageReturn;
import com.apanal.qlife.sys.model.Role;
import com.apanal.qlife.sys.model.User;

/**
 * 角色服务层接口<br>
 * 缓存实现:{@link UserAuthCacheAspect}
 * 
 * @author shuliangxing
 * 
 * @date 2015-1-14上午11:33:49
 */
public interface RoleService {

	/**
	 * 根据id删除
	 * 
	 * @param id
	 * @return
	 */
	String deleteById(Long id);

	/**
	 * 新增
	 * 
	 * @param record
	 * @return
	 */
	String insert(Role record);

	/**
	 * 非空字段新增
	 * 
	 * @param record
	 * @return
	 */
	String insertSelective(Role record);

	/**
	 * 根据id查询
	 * 
	 * @param id
	 * @return
	 */
	Role selectById(Long id);

	/**
	 * 非空字段更新
	 * 
	 * @param record
	 * @return
	 */
	String updateByIdSelective(Role record);

	/**
	 * 更新
	 * 
	 * @param record
	 * @return
	 */
	String updateById(Role record);

	// 分割线

	/**
	 * 查询所有
	 * 
	 * @return
	 */
	List<Role> selectAll();

	/**
	 * 根据id查询相关信息
	 * 
	 * @param id
	 * @return
	 */
	Role selectRelationById(Long id);

	/**
	 * 分页查询相关信息
	 * 
	 * @param entity
	 * @param page
	 * @return
	 */
	PageReturn<Role> selectRelationForPage(Role entity, Page page);

	/**
	 * 软删除
	 * 
	 * @param id
	 *            id
	 * @param useId
	 *            操作人id
	 * @return
	 */
	String softDelete(Long id, Long useId);

	/**
	 * 启用/停用
	 * 
	 * @param role
	 * @return
	 */
	String updateToEnableOrDisable(Role role);

	/**
	 * 检查角色名是否存在,修改时排除当前角色名称
	 * 
	 * @param rolId
	 *            角色id,新增时传0
	 * @param rolName
	 *            角色名称
	 * @return true:存在 false:不存在
	 */
	Boolean checkRoleNameExist(Long rolId, String rolName);

	/**
	 * 根据用户查询角色名称集合,已实现缓存相应功能
	 * 
	 * @param username
	 * @return
	 */
	Set<String> findNamesByUser(User user);

	/**
	 * 根据用户查询角色名称字符串,多个逗号分隔,无"停用"标识,已实现缓存相应功能
	 * 
	 * @param username
	 * @return
	 */
	String findNameStrByUser(User user);

	/**
	 * 根据用户id查询角色集合
	 * 
	 * @param useId
	 * @return
	 */
	List<Role> selectByUseId(Long useId);

	/**
	 * 根据群组id查询角色集合
	 * 
	 * @param groId
	 * @return
	 */
	List<Role> selectByGroId(Long groId);

	/**
	 * 根据id字符串查询
	 * 
	 * @param ids
	 *            逗号分隔
	 * @return
	 */
	List<Role> selectByIds(String ids);

	Role findRoleNameByid(Long useId);
}
